package demo1;

// 模板方法模式；定义一个操作中的算法骨架，而将一些步骤延迟到子类当中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的特定步骤。

public class Main {
    public static void main(String[] args) {
        AbstractClass abstractClass = new ConcreteClassA();
        abstractClass.TemplateMethod();

        abstractClass = new ConcreteClassB();
        abstractClass.TemplateMethod();
    }
}

abstract class AbstractClass {
    //抽线类，就是一个抽象膜拜你，定义并实现了一个模板方法
    public abstract void PrimitiveOperation1();
    public abstract void PrimitiveOperation2();

    public void TemplateMethod(){
        PrimitiveOperation1();
        PrimitiveOperation2();
    }
}

class ConcreteClassA extends AbstractClass{
    //实现类A 实现父类定义的一个或多个抽象方法

    @Override
    public void PrimitiveOperation1() {
        System.out.println("具体类A方法一实现");
    }

    @Override
    public void PrimitiveOperation2() {
        System.out.println("具体类A方法二实现");
    }
}

class ConcreteClassB extends AbstractClass{
    //实现类B 实现父类定义的一个或多个抽象方法


    @Override
    public void PrimitiveOperation1() {
        System.out.println("具体类B方法一实现");
    }

    @Override
    public void PrimitiveOperation2() {
        System.out.println("具体类B方法二实现");
    }
}

